home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / misc / memmgrb3.lha / MemManagerBeta3 / demo / MemManHierachyDemo.mod < prev    next >
Encoding:
Text File  |  1996-09-23  |  2.6 KB  |  120 lines

  1. MODULE MemManHierachyDemo;
  2.  
  3. FROM memmanagerL    IMPORT CreateVMem, RemoveVMem, LockVMem, UnlockVMem,
  4.                    DefineVMemHierachy, ClearVMemHierachy,
  5.                    ChangeVMemPri, paged, disposable;
  6. FROM ExecD          IMPORT MemReqSet, public;
  7. FROM InOut          IMPORT WriteLn, WriteString, WriteCard;
  8. FROM DosL           IMPORT Delay;
  9. FROM SYSTEM         IMPORT ADDRESS, CAST, ADR;
  10.  
  11.  
  12. TYPE
  13.     somedataPtr = POINTER TO somedata;
  14.     somedata    = RECORD
  15.     s   : ARRAY[1..40] OF CHAR;
  16.     n   : CARDINAL;
  17.     END;
  18.  
  19. VAR
  20.     myvmem  : ARRAY [1..65] OF ADDRESS;
  21.     myadr   : ADDRESS;
  22.     i       : CARDINAL;
  23.     ch      : ARRAY [1..2] OF ADDRESS;
  24.     data    : somedataPtr;
  25.  
  26.  
  27.  
  28. BEGIN
  29.     WriteString("Opened library");
  30.     WriteLn;
  31.  
  32.     (* Allocate a load OF memory AND use hierachies TO tell mammanager
  33.     ** what we will need IN whatorder
  34.     ** We allocate 4 megabytes in 64 64k chunks.
  35.     *)
  36.  
  37.     FOR i:=1 TO 64 DO
  38.     myvmem[i]:=CreateVMem(65536, CAST(LONGINT,MemReqSet{public}), 0, paged);
  39.  
  40.     (* Priority is 8 as we are using the block *)
  41.  
  42.     WriteString("Created memory"); WriteLn;
  43.  
  44.     myadr:=LockVMem(myvmem[i]);
  45.     IF myadr<>NIL THEN
  46.         WriteString("Locked Memory"); WriteLn;
  47.         (* This is just TO force it into memory *)
  48.  
  49.         (* Now it is ok FOR us TO Write TO the memory as long
  50.         ** as myadr is NOT NIL *)
  51.  
  52.         data:=CAST(somedataPtr, myadr);
  53.         data^.s := "Some data retreived : ";
  54.         data^.n := i;
  55.  
  56.         UnlockVMem(myvmem[i]);
  57.     ELSE
  58.         WriteString("Couldn't lock vmem - disk or ram full");
  59.     END;
  60.  
  61.     WriteString("Unlocked Memory"); WriteLn;
  62.     END;
  63.  
  64.     myvmem[65]:=NIL; (* has TO be NIL terminated *)
  65.  
  66.     (* Create a Hierachy containing the items we will need IN the
  67.     order we will need them IN *)
  68.  
  69.     DefineVMemHierachy(ADR(myvmem[1]));
  70.  
  71.     (* Now we lock it all again TO test reloading *)
  72.  
  73.     WriteString("Now lets lock all OF that again"); WriteLn;
  74.  
  75.     FOR i:=1 TO 64 DO
  76.     myadr:=LockVMem(myvmem[i]);
  77.  
  78.     WriteString("Locked Memory"); WriteLn;
  79.         (* This is just TO force it into memory *)
  80.  
  81.     (* Now it is ok FOR us TO Write TO the memory as long
  82.     ** as myadr is NOT NIL *)
  83.  
  84.     IF myadr<>NIL THEN
  85.         data:=CAST(somedataPtr, myadr);
  86.         WriteString(data^.s);
  87.         WriteCard(data^.n , 5);
  88.         WriteLn;
  89.  
  90.         UnlockVMem(myvmem[i]);
  91.  
  92.         WriteString("Unlocked Memory"); WriteLn;
  93.     ELSE
  94.         WriteString("Couldn't lock memory!");
  95.     END;
  96.  
  97.     (* Now remove the item FROM the hierachy
  98.     AND reduce it's priority *)
  99.  
  100.     ch[1]:=myvmem[i]; ch[2]:=NIL;
  101.  
  102.     ClearVMemHierachy(ADR(ch));
  103.     ChangeVMemPri(myvmem[i],-8); (* as no longer IN use *)
  104.  
  105.     END;
  106.  
  107.     Delay(200);
  108.  
  109.     WriteString("Removing VMem buffers"); WriteLn;
  110.  
  111.     FOR i:=1 TO 64 DO
  112.     RemoveVMem(myvmem[i]);
  113.     END;
  114.  
  115. END MemManHierachyDemo.
  116.  
  117.  
  118.  
  119.  
  120.